package com.masita.logica;

import java.sql.*;
import java.util.Vector;

public class Devolucion {

	private int id_devolucion;
	private String fecha_dev;
	
	private int id_producto;
	private int id_talle;
	private Producto producto;
	private int cantidad;
	private double total;
	
	public Devolucion(int id_dev, String fec, int id_prod, int id_t, 
					  int cant, double costo){
		this.id_devolucion = id_dev;
		this.fecha_dev = new String(fec);
		this.id_producto = id_prod;
		this.id_talle = id_t;
		this.cantidad = cant;
		this.total = costo;
		this.producto = null;
	}

	// METODO GET DE LA CLASE ***************************** 	
	public int getCantidad(){
		return cantidad;
	}

	public int getIdProducto(){
		return id_producto;
	}

	public int getIdTalle(){
		return id_talle;
	}

	public double getTotal(){
		return total;
	}

	public Producto getProducto(){
		if( this.producto == null && this.id_producto != 0 )
			this.producto = Producto.getProducto(this.id_producto);
		return producto;
	}

	// METODO SET DE LA CLASE *****************************
	public void setCantidad(int i) {
		cantidad = i;
	}

	public void setIdProducto(int i){
		id_producto = i;
		this.producto = null;
	}

	public void setIdTalle(int i){
		id_talle = i;
	}

	public void setTotal(double d){
		total = d;
	}

	public void setProducto(Producto prod){
		if( prod != null )
			this.id_producto = prod.getIdProducto();
		this.producto = prod;
	}

	// METODO ESTATICOS DE LA CLASE ***********************
	public static Devolucion getDevolucion(int id){
		try{
			String sentencia = "SELECT * FROM devolucion WHERE id_devolucion = "+id;
			Statement st = Conexion.getStatement();
			ResultSet rs = st.executeQuery(sentencia);
			if( rs.next() ){
				return new Devolucion(rs.getInt("id_devolucion"),
									  rs.getString("fecha_dev"),
									  rs.getInt("id_producto"),
									  rs.getInt("id_talle"),
									  rs.getInt("cantidad"),
									  rs.getDouble("total"));
			}
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return null;
	}
	
	public static Vector getDevolucionPorProducto(int id_p){
		Vector devoluciones = null;
		try{
			String sentencia = "SELECT * FROM devolucion WHERE id_producto = "+id_p+
							   " ORDER BY fecha_dev";
			Statement st = Conexion.getStatement();
			ResultSet rs = st.executeQuery(sentencia);
			while( rs.next() ){
				if( devoluciones == null ) devoluciones = new Vector();
				devoluciones.addElement(new Devolucion(rs.getInt("id_devolucion"),
									  	rs.getString("fecha_dev"),
									  	rs.getInt("id_producto"),
										rs.getInt("id_talle"),
									  	rs.getInt("cantidad"),
									  	rs.getDouble("total")));
			}
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return devoluciones;
	}

	// DEVUELVE TODAS LAS DEVOLUCIONES REALIZADAS EN UN MES DADO
	public static Vector getDevolucionesMes(int mes){
		Vector devoluciones = null;
		try{
			String sentencia = "SELECT * FROM devolucion WHERE " +							   "fecha_dev like '%-"+mes+"-%' ORDER BY fecha_dev";
			Statement st = Conexion.getStatement();
			ResultSet rs = st.executeQuery(sentencia);
			while( rs.next() ){
				if( devoluciones == null ) devoluciones = new Vector();
				devoluciones.addElement(new Devolucion(rs.getInt("id_devolucion"),
										rs.getString("fecha_dev"),
										rs.getInt("id_producto"),
										rs.getInt("id_talle"),
										rs.getInt("cantidad"),
										rs.getDouble("total")));
			}
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return devoluciones;
	}
	
	// METODO GUARDAR DATOS *******************************
	public int guardarDatos(){
		try{
			String sentencia;
			Statement st = Conexion.getStatement();
			if( this.id_devolucion == 0 ){
				sentencia = "INSERT INTO devolucion VALUES(0,'"+this.fecha_dev+"',"+							this.id_producto+","+this.id_talle+","+this.cantidad+","+
							this.total+")";
				st.executeUpdate(sentencia);
				ResultSet rs = st.getGeneratedKeys();
				if( rs.next() ) this.id_devolucion = rs.getInt(1);
			}
			else{
				sentencia = "UPDATE devolucion SET fecha_dev = '"+this.fecha_dev+"', "+
							"id_producto = "+this.id_producto+", " +							"id_talle = "+this.id_talle+", "+
							"cantidad = "+this.cantidad+", "+
							"precio_costo = "+this.total+
							"WHERE id_devolucion = "+this.id_devolucion;
				st.executeUpdate(sentencia);
			}
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return this.id_devolucion;
	}
	
	public boolean eliminar(){
		
		if( this.id_devolucion == 0 ) return false;
		try{
			String sentencia = "DELETE FROM devolucion WHERE "+							   "id_devolucion = "+this.id_devolucion;
			Statement st = Conexion.getStatement();
			st.executeUpdate(sentencia);
			return true;
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return false;
	}
	
	// METODO QUE ACTUALIZA EL STOCK DE LOS PRODUCTOS
	public void registrarDevolucion(){
		if( this.id_devolucion == 0 ){
			if( this.getProducto() != null ){
				TalleProducto talle = this.producto.getTalle(this.id_talle);
				talle.removeStock(this.cantidad);
				talle.guardarDatos();
				this.guardarDatos();				
			}
		}
	}
}
